home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume90 / examples / spiders / part01
Encoding:
Text File  |  1990-08-17  |  25.1 KB  |  692 lines

  1. Path: abcfd20.larc.nasa.gov!amiga-request
  2. From: amiga-request@abcfd20.larc.nasa.gov (Amiga Sources/Binaries Moderator)
  3. Subject: v90i227: spiders - arachnids amble about your amiga, Part01/01
  4. Reply-To: thyssen@batserver.cs.uq.oz.au (Anthony Thyssen)
  5. Newsgroups: comp.sources.amiga
  6. Message-ID: <comp.sources.amiga:v90i227@abcfd20.larc.nasa.gov>
  7. Date: 17 Aug 90 18:44:35 GMT
  8. Approved: tadguy@uunet.UU.NET (Tad Guy)
  9. X-Mail-Submissions-To: amiga@uunet.uu.net
  10. X-Post-Discussions-To: comp.sys.amiga
  11.  
  12. Submitted-by: thyssen@batserver.cs.uq.oz.au (Anthony Thyssen)
  13. Posting-number: Volume 90, Issue 227
  14. Archive-name: examples/spiders/part01
  15.  
  16. [ uuencoded executable and icon included  ...tad ]
  17.  
  18. Spiders -- A WB screen hack, Arrgghhh spiders are eating my screen!
  19. A minor program developed side-by-side with the crabs program 
  20.  
  21. Any changes you make or Ideas I'd like to hear from you.
  22.  
  23. #!/bin/sh
  24. # This is a shell archive.  Remove anything before this line, then unpack
  25. # it by saving it into a file and typing "sh file".  To overwrite existing
  26. # files, type "sh file -c".  You can also feed this as standard input via
  27. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  28. # will see the following message at the end:
  29. #        "End of archive 1 (of 1)."
  30. # Contents:  .info.uu makefile maskimage spiderimage spiders.c
  31. #   spiders.h spiders.uu spiders0.uu
  32. # Wrapped by tadguy@abcfd20 on Fri Aug 17 14:44:33 1990
  33. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  34. if test -f '.info.uu' -a "${1}" != "-c" ; then 
  35.   echo shar: Will not clobber existing file \"'.info.uu'\"
  36. else
  37. echo shar: Extracting \"'.info.uu'\" \(66 characters\)
  38. sed "s/^X//" >'.info.uu' <<'END_OF_FILE'
  39. Xbegin 644 .info
  40. X8\TP`$@``$2D```+/```&#'-P:61E<G,*R
  41. X``
  42. Xend
  43. Xsize 24
  44. END_OF_FILE
  45. if test 66 -ne `wc -c <'.info.uu'`; then
  46.     echo shar: \"'.info.uu'\" unpacked with wrong size!
  47. fi
  48. # end of '.info.uu'
  49. fi
  50. if test -f 'makefile' -a "${1}" != "-c" ; then 
  51.   echo shar: Will not clobber existing file \"'makefile'\"
  52. else
  53. echo shar: Extracting \"'makefile'\" \(239 characters\)
  54. sed "s/^X//" >'makefile' <<'END_OF_FILE'
  55. X
  56. Xspiders : spiders.c spiders.h spiderimage.i maskimage.i
  57. X        lc -v -Lc $@
  58. X
  59. Xspiderimage.i : spiderimage
  60. X        intergerize <$* >$@
  61. X
  62. Xmaskimage.i : maskimage intergerize
  63. X        intergerize <$* >$@
  64. X
  65. Xclean :
  66. X        delete *.i *.lnk *.o
  67. X
  68. END_OF_FILE
  69. if test 239 -ne `wc -c <'makefile'`; then
  70.     echo shar: \"'makefile'\" unpacked with wrong size!
  71. fi
  72. # end of 'makefile'
  73. fi
  74. if test -f 'maskimage' -a "${1}" != "-c" ; then 
  75.   echo shar: Will not clobber existing file \"'maskimage'\"
  76. else
  77. echo shar: Extracting \"'maskimage'\" \(96 characters\)
  78. sed "s/^X//" >'maskimage' <<'END_OF_FILE'
  79. X***************
  80. X***************
  81. X.*************.
  82. X.*************.
  83. X...*********...
  84. X.....**...*....
  85. END_OF_FILE
  86. if test 96 -ne `wc -c <'maskimage'`; then
  87.     echo shar: \"'maskimage'\" unpacked with wrong size!
  88. fi
  89. # end of 'maskimage'
  90. fi
  91. if test -f 'spiderimage' -a "${1}" != "-c" ; then 
  92.   echo shar: Will not clobber existing file \"'spiderimage'\"
  93. else
  94. echo shar: Extracting \"'spiderimage'\" \(96 characters\)
  95. sed "s/^X//" >'spiderimage' <<'END_OF_FILE'
  96. X.......*.......
  97. X...............
  98. X.**...***...**.
  99. X**..*******..**
  100. X..**..***..**..
  101. X***.........***
  102. END_OF_FILE
  103. if test 96 -ne `wc -c <'spiderimage'`; then
  104.     echo shar: \"'spiderimage'\" unpacked with wrong size!
  105. fi
  106. # end of 'spiderimage'
  107. fi
  108. if test -f 'spiders.c' -a "${1}" != "-c" ; then 
  109.   echo shar: Will not clobber existing file \"'spiders.c'\"
  110. else
  111. echo shar: Extracting \"'spiders.c'\" \(11701 characters\)
  112. sed "s/^X//" >'spiders.c' <<'END_OF_FILE'
  113. X/************************************************************************/
  114. X/*                                                                      */
  115. X/*                                   ######################             */
  116. X/*      A n t h o n y                      ##  ##  ##                   */
  117. X/*                                         ##########                   */
  118. X/*              T h y s s e n            ####  ##  ####                 */
  119. X/*                                     ####    ##    ####               */
  120. X/*                                   ####      ##      ####             */
  121. X/*                                                                      */
  122. X/************************************************************************/
  123. X
  124. X/*
  125. X**  Spiders - for AMIGA under lattace C
  126. X*/
  127. X
  128. X#include <stdio.h>
  129. X#include <string.h>
  130. X#include <intuition/intuition.h>
  131. X#include <graphics/gfx.h>
  132. X#include <exec/exec.h>
  133. X#include <proto/all.h>
  134. X#define   BM_SRC   0xC0      /* minterm source only */
  135. X#define   BM_DST   0xA0      /* minterm destination only */
  136. X
  137. X#include "spiders.h"
  138. X
  139. Xstruct Library       *IntuitionBase = NULL, *GfxBase = NULL;
  140. Xstruct Remember      *Remember = NULL;
  141. Xstruct Screen        *WBScrn = NULL;
  142. Xstruct Window        *Window = NULL;          /* Window pointer */
  143. Xstruct Task          *MyTask = NULL;          /* my tasks address */
  144. Xstruct IntuiMessage  *message;
  145. XULONG                WindowSignal;            /* IDCMP window signal */
  146. Xint                  WBDepth, WBScrX, WBScrY; /* Screen info */
  147. Xstruct NewWindow     NW = {
  148. X        30, 200, 205, 10, 0, 1,               /* position, size and colors */
  149. X        CLOSEWINDOW,                          /* IDCMP messages */
  150. X        ACTIVATE| SIMPLE_REFRESH| WINDOWDEPTH|
  151. X           WINDOWDRAG| WINDOWCLOSE,           /* window flags */
  152. X        NULL, NULL,                           /* gadget, checkmark */
  153. X        (UBYTE *) " -- Spiders -- ",          /* name of window */
  154. X        NULL,NULL,                            /* screen-> , BitMap-> */
  155. X        0,0,0,0,                              /* min and max size (disable) */
  156. X        WBENCHSCREEN                          /* screen type */
  157. X        };
  158. X
  159. X
  160. Xtypedef struct {
  161. X  int           x, y;
  162. X}               point;
  163. X
  164. Xtypedef enum {
  165. X    Sleeping,          /* Waiting to start - off screen */
  166. X    Waiting,           /* Comtemplating the decent */
  167. X    Decending,         /* Going down screen */
  168. X    Landed,            /* Getting a bit of screen */
  169. X    Ascending,         /* Going up the screen */
  170. X    Munching           /* eating its bit of screen */
  171. X} status;
  172. X
  173. Xstatic struct {
  174. X  point              ulc;               /* upper left corner of spider */
  175. X  status             stat;              /* current status of crab */
  176. X  int                time;              /* time count down to actions */
  177. X  struct RastPort    bitRP;             /* raster port for screen bit */
  178. X  struct BitMap      bitBM;             /* bit map for the screen bit */
  179. X}                    Spider[NUMBER];    /* spider' state */
  180. X
  181. X/* images and masks */
  182. Xunsigned short chip  SpiderImage[] =
  183. X#  include "spiderimage.i"
  184. Xunsigned short chip  MaskImage[] =
  185. X#  include "maskimage.i"
  186. X
  187. Xstruct RastPort      SpiderRP, MaskRP, ScreenRP;      /* RastPorts */
  188. Xstruct BitMap        SpiderBM, MaskBM;                /* BitMaps */
  189. X
  190. X#ifdef CBACK
  191. X/* Cback.o varibles */
  192. Xlong _stack = 2000;
  193. Xchar *_procname = "spiders";
  194. Xlong _priority = -1;
  195. Xlong _BackGroundIO = 0;
  196. X#endif
  197. X
  198. X  /* function declarations */
  199. Xextern void  Init(), OpenLibraries(), SpiderExit(), Cycle();
  200. Xextern void  HideScrBit(), DrawScrBit(), HideSpider(), DrawSpider();
  201. Xextern int   TestDown(), RandInt();
  202. Xextern void  RandInit();
  203. X
  204. Xvoid
  205. X_main()
  206. X  /* I am not using printf's functions so _main() will do */
  207. X{
  208. X  Init();                              /* set up initial grey crab layer */
  209. X
  210. X  for (;;) {                           /* no way out! */
  211. X    Cycle();                           /* move the crabs */
  212. X  }
  213. X  /* NOTREACHED */
  214. X}
  215. X
  216. Xvoid
  217. XInit()
  218. X{
  219. X  int i, j;
  220. X
  221. X  RandInit();
  222. X
  223. X  OpenLibraries();        /* open the various system structures */
  224. X
  225. X  if( !(Window = OpenWindow( &NW )) )
  226. X    SpiderExit();
  227. X  WindowSignal = 1<<Window->UserPort->mp_SigBit;
  228. X
  229. X  MyTask = FindTask( NULL );
  230. X  WBScrn = Window->WScreen;
  231. X  WBDepth = 2;                            /* Assume it (for WB pic progs) */
  232. X  WBScrX = WBScrn->Width -XSPIDER;
  233. X  WBScrY = WBScrn->Height -YSPIDER;
  234. X
  235. X  /* grab a copy of the screens raster port */
  236. X  memcpy( (char *)&ScreenRP, (char *)&WBScrn->RastPort,
  237. X                                       sizeof( struct RastPort ) );
  238. X
  239. X  /* define spiders */
  240. X  for (i = 0; i < NUMBER; i++) {
  241. X    Spider[i].stat = Sleeping;               /* spider is just sleeping */
  242. X    Spider[i].time = RandInt(1, SLEEPTIME);
  243. X      /* initialise bitmaps */
  244. X    InitRastPort( &Spider[i].bitRP );
  245. X    Spider[i].bitRP.BitMap = &Spider[i].bitBM;
  246. X    InitBitMap( &Spider[i].bitBM, WBDepth, XMASK, YMASK);
  247. X    for( j = 0; j < WBDepth; j++ )
  248. X      if( !( Spider[i].bitBM.Planes[j] = (PLANEPTR)
  249. X           AllocRemember( &Remember, RASSIZE(XMASK, YMASK),
  250. X               MEMF_CHIP | MEMF_CLEAR ) ) )
  251. X        SpiderExit();
  252. X  }
  253. X    InitRastPort( &MaskRP );
  254. X    MaskRP.BitMap = &MaskBM;
  255. X    InitBitMap( &MaskBM, WBDepth, XMASK, YMASK);
  256. X    for( j = 0; j < WBDepth; j++ )
  257. X      MaskBM.Planes[j] = (PLANEPTR) &MaskImage;
  258. X
  259. X    InitRastPort( &SpiderRP );
  260. X    SpiderRP.BitMap = &SpiderBM;
  261. X    InitBitMap( &SpiderBM, 1, XSPIDER, YSPIDER);
  262. X    SpiderBM.Planes[0] = (PLANEPTR) &SpiderImage;
  263. X}
  264. X
  265. Xvoid
  266. XOpenLibraries()
  267. X{
  268. X  if( ! (IntuitionBase = OpenLibrary( "intuition.library", 0 )) )
  269. X    SpiderExit();
  270. X  if( ! (GfxBase = OpenLibrary( "graphics.library", 0 )) )
  271. X    SpiderExit();
  272. X}
  273. X
  274. Xvoid
  275. XSpiderExit()
  276. X/* exit - remove all traces */
  277. X{
  278. X  FreeRemember( &Remember, TRUE );          /* free all allocated memory */
  279. X
  280. X  if( Window )          CloseWindow( Window );
  281. X  if( GfxBase )         CloseLibrary( GfxBase );
  282. X  if( IntuitionBase )   CloseLibrary(  IntuitionBase );
  283. X
  284. X  exit(0);
  285. X}
  286. X
  287. Xvoid
  288. XCycle()
  289. X /* one motion cycle for all spiders */
  290. X{
  291. X  int             s;                 /* spider to do */
  292. X
  293. X  /* test for window closure */
  294. X  if( message = (void *)GetMsg(Window->UserPort) ) {
  295. X    ReplyMsg( (void *) message );
  296. X    switch( message->Class ) {
  297. X      case CLOSEWINDOW : /* window closed message */
  298. X        SpiderExit();
  299. X    }
  300. X  } /* Message test */
  301. X
  302. X#if DELAY
  303. X  Delay(DELAY);
  304. X#endif
  305. X
  306. X  for (s = 0; s < NUMBER; s++) {
  307. X    switch( Spider[s].stat ) {
  308. X      case Sleeping:
  309. X        {
  310. X          int i, test;
  311. X
  312. X          if( --Spider[s].time ) break;     /* spider not yet ready to start */
  313. X          do {
  314. X            Spider[s].ulc.x = RandInt(0, WBScrX);
  315. X            test = TRUE;                    /* assume this position is OK */
  316. X            for(i = 0; i < NUMBER; i++)
  317. X              if( Spider[i].stat != Sleeping &&
  318. X                  Spider[s].ulc.x > Spider[i].ulc.x - XSPIDER &&
  319. X                  Spider[i].ulc.x > Spider[s].ulc.x - XSPIDER ) {
  320. X                test = FALSE;   /* spider on screen already in this position */
  321. X                break;
  322. X              }
  323. X          } while ( !test );    /* repeat search until good position found */
  324. X          Spider[s].ulc.y = SCREENTOP;
  325. X          Spider[s].stat = Waiting;
  326. X          Spider[s].time = WAITTIME;
  327. X          DrawSpider(s);
  328. X        }
  329. X        break;
  330. X
  331. X      case Waiting:
  332. X          if( Spider[s].time-- )   break;
  333. X          Spider[s].stat = Decending;
  334. X          break;
  335. X
  336. X      case Decending:
  337. X        {
  338. X          int   y, speed;
  339. X
  340. X          y = Spider[s].ulc.y;
  341. X          speed = TestDown(s);      /* check on landing or screen bottom */
  342. X          y += speed;                /* Decend quickly or stop? */
  343. X          if( !speed )
  344. X            Spider[s].stat = Landed;
  345. X          Spider[s].ulc.y = y;
  346. X          DrawSpider(s);            /* don't hide spide to leave ... trail */
  347. X        }
  348. X        break;
  349. X
  350. X      case Landed:
  351. X        /* bit of screen already read in testdown() just wait */
  352. X        Spider[s].stat = Ascending;
  353. X        break;
  354. X
  355. X      case Ascending:
  356. X        {
  357. X          int   y;
  358. X
  359. X          y = Spider[s].ulc.y;
  360. X          y--;                         /* Ascend at a slow rate */
  361. X          if( y < SCREENTOP ) {        /* Spider hit rock bottom */
  362. X            y = SCREENTOP;
  363. X            Spider[s].stat = Munching;
  364. X            Spider[s].time = (YMASK+2) * EATRATE-1;
  365. X          }
  366. X          HideSpider(s); HideScrBit(s);
  367. X          Spider[s].ulc.y = y;
  368. X          DrawSpider(s); DrawScrBit(s);
  369. X        }
  370. X        break;
  371. X
  372. X      case Munching:
  373. X        if( !Spider[s].time ) {
  374. X          /* reinitialize start */
  375. X          Spider[s].stat = Sleeping;
  376. X          Spider[s].time = RandInt(1, SLEEPTIME);   /* random delay in starting */
  377. X          HideSpider(s);
  378. X          break;
  379. X        }
  380. X        if( !(Spider[s].time-- % EATRATE ) ) {       /* eat another bit? */
  381. X          HideScrBit(s);
  382. X          ScrollRaster( &Spider[s].bitRP, 0, 1, 0, 0, XMASK-1, YMASK-1);
  383. X          DrawScrBit(s);
  384. X        }
  385. X        break;
  386. X    }
  387. X  }    /* move next spider */
  388. X}
  389. X
  390. Xint
  391. XTestDown(s)
  392. X  int             s;
  393. X/* returns distance to first screen bit below spider */
  394. X/* if the Spider is withing SPEED of that piece  */
  395. X/* Also gets the actual piece into the bitRP of spider */
  396. X{
  397. X  int    i, j, size, speed = SPEED;
  398. X  UBYTE *bits0, *bits1;
  399. X  /* clear out any old image */
  400. X  SetRast( &Spider[s].bitRP, 0 );
  401. X
  402. X  size = WBScrY - Spider[s].ulc.y;
  403. X  if( size > YMASK )    size = YMASK;     /* reduce image size */
  404. X  if( size < speed )    speed = size;     /* reduce speed - don't over shoot */
  405. X  if( !size )           return 0;         /* oops rock bottom! */
  406. X
  407. X  /* get a image from screen */
  408. X  ClipBlit( &ScreenRP, Spider[s].ulc.x, Spider[s].ulc.y + YSPIDER,
  409. X            &Spider[s].bitRP, 0, 0,
  410. X            XMASK, size, BM_SRC);
  411. X  /* mask out background */
  412. X  ClipBlit( &MaskRP, 0, 0,
  413. X            &Spider[s].bitRP, 0, 0,
  414. X            XMASK, YMASK, BM_SRC & BM_DST);
  415. X
  416. X  /* check the data to find distance to landing on screen bit */
  417. X  bits0 = Spider[s].bitBM.Planes[0];
  418. X  bits1 = Spider[s].bitBM.Planes[1];
  419. X  for (i = 0; i < speed; i++)
  420. X    for( j = 0; j < Spider[s].bitBM.BytesPerRow; j++ )
  421. X      if( *(bits0++) || *(bits1++) )   /* if a bit in either plane */
  422. X        return i;                      /* return distance to screen bit */
  423. X
  424. X  return speed;                        /* return speed */
  425. X}
  426. X
  427. Xvoid
  428. XHideScrBit(s)
  429. X  int s;
  430. X  /* remove screen bit carried */
  431. X{
  432. X  int  size;
  433. X
  434. X  size = WBScrY - Spider[s].ulc.y;
  435. X  if( size > YMASK )    size = YMASK;      /* reduce image size */
  436. X  if( !size )           return;            /* noting to erase */
  437. X
  438. X  ClipBlit( &MaskRP, 0, 0,
  439. X            &ScreenRP, Spider[s].ulc.x, Spider[s].ulc.y + YSPIDER,
  440. X            XMASK, size, ~BM_SRC & BM_DST);
  441. X}
  442. X
  443. Xvoid
  444. XDrawScrBit(s)
  445. X  int s;
  446. X/* draw screen bit carried */
  447. X{
  448. X  int  size;
  449. X
  450. X  size = WBScrY - Spider[s].ulc.y;
  451. X  if( size > YMASK )    size = YMASK;     /* reduce image size */
  452. X  if( !size )           return;           /* no room to draw */
  453. X  ClipBlit( &Spider[s].bitRP, 0, 0,
  454. X            &ScreenRP, Spider[s].ulc.x, Spider[s].ulc.y + YSPIDER,
  455. X            XMASK, size, BM_SRC | BM_DST);
  456. X}
  457. X
  458. Xvoid
  459. XHideSpider(s)
  460. X  int    s;
  461. X/* over write current spider */
  462. X{
  463. X  ClipBlit( &SpiderRP, 0, 0,
  464. X            &ScreenRP, Spider[s].ulc.x, Spider[s].ulc.y,
  465. X            XSPIDER, YSPIDER, 0);
  466. X}
  467. X
  468. Xvoid
  469. XDrawSpider(s)
  470. X  int    s;
  471. X/* Draw the spider on the screen */
  472. X{
  473. X  ClipBlit( &SpiderRP, 0, 0,
  474. X            &ScreenRP, Spider[s].ulc.x, Spider[s].ulc.y,
  475. X            XSPIDER, YSPIDER, BM_SRC);
  476. X}
  477. X
  478. Xvoid
  479. XRandInit()
  480. X{
  481. X  srand((int)time(NULL));
  482. X}
  483. X
  484. Xint
  485. XRandInt(lo, hi)                        /* generate random integer in range */
  486. X  int             lo, hi;              /* range lo..hi inclusive */
  487. X{
  488. X  return lo + (int)( (unsigned)rand() % (hi - lo +1) );
  489. X}
  490. X
  491. END_OF_FILE
  492. if test 11701 -ne `wc -c <'spiders.c'`; then
  493.     echo shar: \"'spiders.c'\" unpacked with wrong size!
  494. fi
  495. # end of 'spiders.c'
  496. fi
  497. if test -f 'spiders.h' -a "${1}" != "-c" ; then 
  498.   echo shar: Will not clobber existing file \"'spiders.h'\"
  499. else
  500. echo shar: Extracting \"'spiders.h'\" \(679 characters\)
  501. sed "s/^X//" >'spiders.h' <<'END_OF_FILE'
  502. X/* This contains all the defines for spider.c */
  503. X
  504. X#define NUMBER        5      /* number of spiders to use */
  505. X#define SPEED         2      /* speed (pixels) of decending spider */
  506. X#define SLEEPTIME    30      /* time maximun bettween on screen action */
  507. X#define WAITTIME     30      /* time to wait at the top of screen */
  508. X#define EATRATE      10      /* cycles to eat a line of screen bits */
  509. X#define SCREENTOP    10      /* start height for spiders */
  510. X#define DELAY         0      /* delay period for Delay() call */
  511. X
  512. X#define XSPIDER      15      /* Spider image size */
  513. X#define YSPIDER       6
  514. X
  515. X#define XMASK        15      /* screen bit mask size */
  516. X#define YMASK         6
  517. X
  518. END_OF_FILE
  519. if test 679 -ne `wc -c <'spiders.h'`; then
  520.     echo shar: \"'spiders.h'\" unpacked with wrong size!
  521. fi
  522. # end of 'spiders.h'
  523. fi
  524. if test -f 'spiders.uu' -a "${1}" != "-c" ; then 
  525.   echo shar: Will not clobber existing file \"'spiders.uu'\"
  526. else
  527. echo shar: Extracting \"'spiders.uu'\" \(7024 characters\)
  528. sed "s/^X//" >'spiders.uu' <<'END_OF_FILE'
  529. Xbegin 644 spiders
  530. XM```#\P`````````$``````````,```1S0```!@````````'7```#Z0``!',D9
  531. XM2"0`2?D`````1_D```$$<@`@/````99@`B;!4<C__"QX``0I3@$\*4\!1$*L\
  532. XM`4`F;@$4<``B/```,`!.KO[.*6L`F`$X2JL`K&<``'`@#Y"O``0&@````(`IN
  533. XM0`$(80`!+B!K`*S1R-'((F@`$-/)T\D@`G(`$ADI20%,T(%2@$)G4H`"0/_^O
  534. XMG\!5@$)W"``@`E.`U($?L@``(`!3@E'(__8?O``@(`!3@A^Q(``@`%'*__@B'
  535. XM3R\)8```>"EK`#H!"'!_4H#1K`$(80``PD'K`%Q.KOZ`0>L`7$ZN_HPI0`%`:
  536. XM+P`D0"`J`"1G$BQL!TP@0"(H```I00$X3J[_@B(J`"!G&B0\```#[4ZN_^(IR
  537. XM0`%(9PKEB"!`)V@`"`"D(&P!0"\(2&P!!"!H`"0I:``$`4Q.N@D(3KH`='``2
  538. XM8`0@+P`$+P`@+`$P9P0@0$Z03KH0)"QX``0B;`=,3J[^8DZZ"-Y*K`%`9QHBU
  539. XM+`%(9P1.KO_<+'@`!$ZN_WPB;`%`3J[^AB`?+FP!1$YU<&1@M$/Z`!!P`$ZNG
  540. XM_=@I0`=,9^Q.=61O<RYL:6)R87)Y`&$```AA``):8/I.5?_\2.<C,F$`"$9A"
  541. XM``'`0>P`*"QL``!.KO\T*4``$$J`9@1A``'B(&P`$"!H`%9P`!`H``]R`>&AT
  542. XM*4$!5)/)+'@`!$ZN_MHI0``4(&P`$"EH`"X`#'`"*4`!6"!L``PP*``,2,!RE
  543. XM#Y"!*4`!7#`H``Y(P%V`*4`!8$/H`%1P8T'L!3@0V5'(__Q^`'`%OH!L``#2C
  544. XM(`=R3M*!3KH-*D/L`61"L0@(2'@`'DAX``$O0``@80`'K%!/0>P!9"(O`!@A-
  545. XM@!@,(`=R3M*!3KH,^D'L`631P$/H`!`L;``$3J[_.B`'<D[2@4ZZ#-Y![`%D9
  546. XM(DC3P$7I`'1'[`%D)XH(%-'`0^@`="!)("P!6'(/=`8L;``$3J[^>GP`O*P!R
  547. XM6&Q`(`=R3M*!3KH,H$/L`633P"`&Y8#3P"])`!A![``(<`PB/``!``(L;```Q
  548. XM3J[^="!O`!@A0`!\9@1A``"P4H9@NE*'8`#_*D/L!-0L;``$3J[_.D'L!<0IX
  549. XM2`38("P!6'(/=`9.KOYZ?`"\K`%8;!0@!N6`0>P%S"&\````#`@`4H9@YD/L\
  550. XM!'`L;``$3J[_.D'L!9PI2`1T<`%R#W0&3J[^>BE\``````6D3-],Q$Y=3G4O"
  551. XM#D/L`%AP`"QX``1.KOW8*4```$J`9@1A```@0^P`:G``+'@`!$ZN_=@I0``$+
  552. XM2H!F!&$```8L7TYU+PY![``(<`$L;```3J[^:$JL`!!G""!L`!!.KO^X2JP``
  553. XM!&<,(FP`!"QX``1.KOYB2JP``&<,(FP``"QX``1.KOYB0J=.N@HH6$\L7TYU@
  554. XM3E7_\$CG+S(@;``0(&@`5BQX``1.KOZ,*4`!4$J`9QHB0$ZN_H8@;`%0("@`6
  555. XM%`R````"`&8$80#_>GX`<`6^@&P``N8@!W).TH%.N@LD0^P!9"(Q"`@,@0``@
  556. XM``9D``+$Y8%.^Q@"8```%F```0I@``$T8``!A&```9A@``(`(`=R3M*!3KH*[
  557. XMZD/L`613L0@,9@`"D"`'<D[2@4ZZ"M0O+`%<0J<O0``H80`%8%!/0>P!9"(ON
  558. XM`"`A@!@`>@%\`'`%O(!L>"`&<D[2@4ZZ"J0O0``@0^P!9$JQ"`AG7"`'<D[2^
  559. XM@4ZZ"HPD;P`@<O%'[`%D)`K2LR@`1>P!9"0R"`"T@6\V(`9R3M*!3KH*9B]`6
  560. XM`"`@!W).TH%.N@I8<O%%[`%DTK((`$7L`60@+P`@(#((`+"!;P1Z`&`$4H9@B
  561. XM@DJ%9P#_5"`'<D[2@4ZZ"B9R"D/L`60C@0@$<@%#[`%D(X$("'(>0^P!9".!`
  562. XM"`PO!V$`!$983V```:X@!W).TH%.N@GR0^P!9"(Q"`Q#[`%D4[$(#$J!9@`!!
  563. XMCG("0^P!9".!"`A@``&`(`=R3M*!3KH)Q$/L`60H,0@$+P=A``%V6$_8@"M`K
  564. XM__1F%"`'<D[2@4ZZ":)R`T'L`60A@0@((`=R3M*!3KH)CD'L`60AA`@$+P=A&
  565. XM``/$6$]@``$L(`=R3M*!3KH)<'($0^P!9".!"`A@``$4(`=R3M*!3KH)6$/L[
  566. XM`60B,0@$*T'_^%.!*T'_^'0*LH)L&'(%0^P!9".!"`AR3T/L`60C@0@,*T+_,
  567. XM^"\'80`#(BZ'80`",B`'<D[2@4ZZ"1)![`%D(:W_^`@$+H=A``-&+H=A``*"W
  568. XM6$]@``"H(`=R3M*!3KH([$/L`61*L0@,9BY#[`%D0K$("$AX`!Y(>``!+T``!
  569. XM*&$``V1![`%D(B\`*"&`&`PNAV$``KA03V!D(`=R3M*!3KH(JD'L`60B,`@,?
  570. XM0>P!9%.P"`P@`7(*3KH(LDJ!9CXO!V$``9X@!W).TH%.N@A^0>P!9-'`0^@`#
  571. XM$$AX``5(>``.<``O`"\`2'@``2\`+PE.N@HN+H=A``':3^\`(%*'8`#]%DS??
  572. XM3/1.74YU3E7_Z$CG+P(N+P`X<`(K0/_P(`=R3M*!3KH()D'L`631P$/H`!!PW
  573. XM`"QL``1.KO\6(`=R3M*!3KH(""(L`6!![`%DDK`(!"@!<`:X@&\"*`"XK?_P2
  574. XM;`0K1/_P2H1F!G``8```["`'<D[2@4ZZ!]1![`%D(C`(!%R!0>P!9-'`0^@`\
  575. XM$$AX`,`O!$AX``]T`"\"+P(O"2\!0>P!9"\P"`!(;`4X3KH)Q"`'<D[2@4ZZ1
  576. XM!Y)![`%DT<!#Z``02'@`@$AX``9(>``/<``O`"\`+PDO`"\`2&P$U$ZZ"9!/L
  577. XM[P!((`=R3M*!3KH'6D'L`60K<`A\_^Q![`%D(@`&@0```(`K<!@`_^A\`+RMP
  578. XM__!L/GH`(`=R3M*!3KH'*G(`0>P!9#(P"'2Z@6P@(&W_[%*M_^Q*$&8,(&W_I
  579. XMZ%*M_^A*$&<$(`9@#%*%8,A2AF"\("W_\$S?0/1.74YU2.<C`"XO`!`@!W).'
  580. XMTH%.N@;:(BP!8$'L`622L`@$+`%P!KR`;P(L`$J&9SX@!W).TH%.N@:V0>P!G
  581. XM9"(P"`1<@4AX`"`O!DAX``\O`4'L`60O,`@`2&P%.'0`+P(O`DAL!-1.N@BN]
  582. XM3^\`)$S?`,1.=4CG(R`N+P`4(`=R3M*!3KH&:B(L`6!![`%DDK`(!"P!<`:\7
  583. XM@&\"+`!*AF=((`=R3M*!3KH&1D'L`60B2-/`1>D`$$'L`60B,`@$7(%(>`#@D
  584. XM+P9(>``/+P%![`%D+S`(`$AL!3AT`"\"+P(O"DZZ"#1/[P`D3-\$Q$YU+P<NM
  585. XM+P`((`=R3M*!3KH%\G(`+P%(>``&2'@`#T'L`60O,`@$0>P!9"\P"`!(;`4X.
  586. XM+P$O`4AL!'!.N@?N3^\`)"X?3G4O!RXO``@@!W).TH%.N@6N2'@`P$AX``9(5
  587. XM>``/0>P!9"\P"`1![`%D+S`(`$AL!3AR`"\!+P%(;`1P3KH'J$_O`"0N'TYU1
  588. XM0J=.N@%6+H!.N@*46$].=4CG`P`N+P`,+"\`$$ZZ`F0B!I*'4H%.N@6@(`?0J
  589. XM@4S?`,!.=0``3G5.=4CG!S`N+P`8)F\`'"PO`"`O!TZZ!@Q83R1`(`IF!'#_:
  590. XM8#8(*@`#``-G$$AX``)"IR\'3KH"0$_O``PO!B\++RH`!$ZZ!`1/[P`,*@!*4
  591. XMK`$<9P1P_V`"(`5,WPS@3G4``````````'!A3E7_^"\+)FP'+"`+9@1'^@!\`
  592. XM&5,'0!EK``$'01EK``('0D(L!T-![`=`*4@'.$'K``-(;?_X+PA.N@%:4$]65
  593. XM@-?`("W_^"(\```.$$ZZ!(8I0`<T2A-G'AE3!T09:P`!!T49:P`"!T9P`!E`3
  594. XM!T=R`2E!!S!@"$(L!T1"K`<P0>P'1"E(!SPF7TY=3G5#4U0V````````````G
  595. XM`````````````````````````````````````````$Y5__)(YP<0)F\`)DAM*
  596. XM__A.N@&26$]Z`!`M__DL``8&``I^`+X&9")P`!`'5(!R!$ZZ!`I*@68(!H4`=
  597. XM``%N8`8&A0```6U2!V#:?@$0+?_ZO@!D%'``$`=R`$'L`.<2,`@`VH%2!V#D;
  598. XM<``0!E2`<@1.N@/*2H%F#!`M__IR`K`!8P)2A7``$"W_^U.`VH`@!7(83KH#'
  599. XMB"H`<``0+?_\VH`@!7(\3KH#=BH`<``0+?_]VH`@!7(\3KH#9"H`<``0+?_^+
  600. XMVH!.NOZ"VJP'-"`+9P(FA2`%3-\(X$Y=3G4@;P`$(DAR`'``+P(,$``K9P8,8
  601. XM$``M9@)22!`8!```,&T2#```"6X,)`'E@=*"TH'2@&#F#!$`+68"1($D'R`(5
  602. XM4X`@;P`(((&0B4YU("P`]"(\```.74ZZ`NA6@`*`?____RE``/1.=2\'+B\`I
  603. XM""E'`/0N'TYU``!(YP\0+B\`&"PO`!PJ+P`@+P=.N@.86$\F0"`+9@1P_V`>7
  604. XM+P4O!B\K``1.N@(`3^\`#"@`2JP!'&<$</]@`B`$3-\(\$YU``````````!P,
  605. XM84Y5_^!(YR\0)F\`0$'M__0B""QL!TQ.KO]`("W_]"X\```'NBP`*T#_\`R&:
  606. XM```!;6\>(`=R!$ZZ`F!*@68(!(8```%N8`8$A@```6U2AV#:#(8```%M9A`@[
  607. XM!W($3KH".DJ!9P12AWP`(`8B!P2!```'O!=!``%T`!0!*T#_\"`"<@1.N@(45
  608. XM2H%F!'`=8`)P'!E``/EX`"HM__!P#+B`;!YP`$'L`/@0,$@`L(5N$'``0>P`K
  609. XM^!`P2`":@%*$8-P@!2($4H$700`"*T#_\%*`%T```R`M__1R!TZZ`;X6@2`M.
  610. XM__AR/$ZZ`;(70``$("W_^'(\3KH!I!=!``4@+?_\<C).N@&6%T``!B`M__QR9
  611. XM,DZZ`8C2@1=!``=,WPCT3EU.=0```````'!A2.<#$"XO`!!'[`"`(`MG-`@KV
  612. XM``(`&V8H""L``0`;9R`@*P`$D*L`$"P`2H9G$B\&+RL`$"\K`!Q.NOO:3^\``
  613. XM#"938,@O!TZZ`HA83TS?",!.=0``````````<&%(YS<0+B\`'"9O`"`L+P`D&
  614. XM2JP!-&<$3KH"#$*L`1PB!R0+)@8L;`=,3J[_T"H`</^Z@&8.3J[_?"E``1QPE
  615. XM!2E`!T@@!4S?".Q.=0``````````````````2.<_`"XO`!PL+P`@*B\`)$JL9
  616. XM`31G!$ZZ`;1"K`$<(`53@"(')`8F`"QL!TQ.KO^^*`!P_[B`9@Y.KO]\*4`!A
  617. XM''`6*4`'2"`%#(`````"9Q8,@`````%G"$J`9A@@!F`4(`30AF`.(@=T`'8`C
  618. XM+&P'3$ZN_[Y,WP#\3G4``"\'+B\`"$JL`31G!$ZZ`4(B!RQL!TQ.KO_<<``N3
  619. XM'TYU2.<P`"0`)@%(0DA#Q,'&P,#!U$-(0D)"T(),WP`,3G5*@&H``!Y$@$J!_
  620. XM:@``#$2!80``($2!3G5A```81(!$@4YU2H%J```,1(%A```&1(!.=2\"2$$TK
  621. XM`68``")(0$A!2$(T`&<```:$P3`"2$`T`(3!,`)(0C(")!].=2\#=A`,00"`X
  622. XM9```!N&944,,00@`9```!NF964,,02``9```!N6954-*06L```;CF5-#-`#FJ
  623. XMJ$A"0D+FJDA#@,$V`#`"-`-(0<3!D()D```(4T/0@63^<@`R`TA#Y[A(0,%!A
  624. XM)A\D'TYU+P<N+P`(<``I0`$<2H=K(KZL`'QL'"`'YX!![`7L2K`(`&<.(`?G9
  625. XM@$'L!>S1P"`(8`AP"2E`!TAP`"X?3G4``````````````````$CG`0)P`"(\P
  626. XM```P`"QX``1.KO[.+@`"AP``,`!*AV8$<`!@($JL`31G&"!L`31.D$J`9@1P?
  627. XM`&`,2'@`%$ZZ`!)83R`'3-]`@$YU8;1.=0``2.<'`"XO`!`@+`!\4X`L`$I&H
  628. XM:S`@!DC`YX!![`7L*C`(`$H%9QH(!0`"9A0@!DC`YX!![`7L+S`(!$ZZ_B18I
  629. XM3U-&8,PO!TZZ[_I83TS?`.!.=0``2.<\`BQL``0B;P`83.\`/P`<3J[^=$S?1
  630. XM0#Q.=0```````'!A2.<`,B9L!U`@"V<4)%,B2R`K``@L>``$3J[_+B9*8.B11
  631. XMR"E(!U0I2`=03-],`$YU2.<^`BQL``0@;P`<3.\``P`@(F\`*$SO`'P`+$ZN"
  632. XM_=A,WT!\3G4``````^P````"`````0```W8```-,`````@````,````,````*
  633. XM!@````````/R0``#Z@````8!````8XS/YC.8X`[__O_^?_Q__!_P!B````/RF
  634. XM```#Z0````````/R```#Z@```$$````````````````````````````````@O
  635. XM+2T@4W!I9&5R<R`M+2```!X`R`#-``H``0```@```!!.```````````````8D
  636. XM```````````````````````!:6YT=6ET:6]N+FQI8G)A<GD`9W)A<&AI8W,N&
  637. XM;&EB<F%R>0``````*````*(`````````````````````````````````````_
  638. XM``````#$````````````````````````````````````````````````````$
  639. XM````````````````````````````````````'QP?'A\>'Q\>'QX?`````1\<I
  640. XJ'QX?'A\?'A\>'P```^P````#`````P```*(```"`````0@````````/R`
  641. X``
  642. Xend
  643. Xsize 4992
  644. END_OF_FILE
  645. if test 7024 -ne `wc -c <'spiders.uu'`; then
  646.     echo shar: \"'spiders.uu'\" unpacked with wrong size!
  647. fi
  648. # end of 'spiders.uu'
  649. fi
  650. if test -f 'spiders0.uu' -a "${1}" != "-c" ; then 
  651.   echo shar: Will not clobber existing file \"'spiders0.uu'\"
  652. else
  653. echo shar: Extracting \"'spiders0.uu'\" \(393 characters\)
  654. sed "s/^X//" >'spiders0.uu' <<'END_OF_FILE'
  655. Xbegin 644 spiders.info
  656. XMXQ```0```````````!H`%``$``,``0#!K,@`````````````````````````?
  657. XM`````\(``````````````!,````$```````````````````````:`!,``@##.
  658. XMJF@#``````````````@`````````"``````````(``````````@````````#X
  659. XM'C``!G^8``&>8``'`#@`!5UH``6[J``!?O```..`````````````````````M
  660. XM`````````````````````````````````````````````````````````````
  661. X9``?^^``#SO@``=\0``#3@```````````````)
  662. X``
  663. Xend
  664. Xsize 250
  665. END_OF_FILE
  666. if test 393 -ne `wc -c <'spiders0.uu'`; then
  667.     echo shar: \"'spiders0.uu'\" unpacked with wrong size!
  668. fi
  669. # end of 'spiders0.uu'
  670. fi
  671. echo shar: End of archive 1 \(of 1\).
  672. cp /dev/null ark1isdone
  673. MISSING=""
  674. for I in 1 ; do
  675.     if test ! -f ark${I}isdone ; then
  676.     MISSING="${MISSING} ${I}"
  677.     fi
  678. done
  679. if test "${MISSING}" = "" ; then
  680.     echo You have the archive.
  681.     rm -f ark[1-9]isdone
  682. else
  683.     echo You still need to unpack the following archives:
  684.     echo "        " ${MISSING}
  685. fi
  686. ##  End of shell archive.
  687. exit 0
  688. -- 
  689. Mail submissions (sources or binaries) to <amiga@uunet.uu.net>.
  690. Mail comments to the moderator at <amiga-request@uunet.uu.net>.
  691. Post requests for sources, and general discussion to comp.sys.amiga.
  692.